/*
Copyright (C) 2018-2019 de4dot@gmail.com

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

// ⚠️This file was generated by GENERATOR!🦹‍♂️

use super::super::OpCodeOperandKind;

#[cfg_attr(feature = "cargo-fmt", rustfmt::skip)]
pub(super) static LEGACY_OP_KINDS: [OpCodeOperandKind; 121] = [
	OpCodeOperandKind::None,// None
	OpCodeOperandKind::farbr2_2,// Aww
	OpCodeOperandKind::farbr4_2,// Adw
	OpCodeOperandKind::mem,// M
	OpCodeOperandKind::mem,// Mfbcd
	OpCodeOperandKind::mem,// Mf32
	OpCodeOperandKind::mem,// Mf64
	OpCodeOperandKind::mem,// Mf80
	OpCodeOperandKind::mem,// Mfi16
	OpCodeOperandKind::mem,// Mfi32
	OpCodeOperandKind::mem,// Mfi64
	OpCodeOperandKind::mem,// M14
	OpCodeOperandKind::mem,// M28
	OpCodeOperandKind::mem,// M98
	OpCodeOperandKind::mem,// M108
	OpCodeOperandKind::mem,// Mp
	OpCodeOperandKind::mem,// Ms
	OpCodeOperandKind::mem,// Mo
	OpCodeOperandKind::mem,// Mb
	OpCodeOperandKind::mem,// Mw
	OpCodeOperandKind::mem,// Md
	OpCodeOperandKind::mem_mpx,// Md_MPX
	OpCodeOperandKind::mem,// Mq
	OpCodeOperandKind::mem_mpx,// Mq_MPX
	OpCodeOperandKind::mem,// Mw2
	OpCodeOperandKind::mem,// Md2
	OpCodeOperandKind::r8_or_mem,// Eb
	OpCodeOperandKind::r16_or_mem,// Ew
	OpCodeOperandKind::r32_or_mem,// Ed
	OpCodeOperandKind::r32_or_mem_mpx,// Ed_MPX
	OpCodeOperandKind::r32_or_mem,// Ew_d
	OpCodeOperandKind::r64_or_mem,// Ew_q
	OpCodeOperandKind::r64_or_mem,// Eq
	OpCodeOperandKind::r64_or_mem_mpx,// Eq_MPX
	OpCodeOperandKind::mem,// Eww
	OpCodeOperandKind::mem,// Edw
	OpCodeOperandKind::mem,// Eqw
	OpCodeOperandKind::r32_or_mem,// RdMb
	OpCodeOperandKind::r64_or_mem,// RqMb
	OpCodeOperandKind::r32_or_mem,// RdMw
	OpCodeOperandKind::r64_or_mem,// RqMw
	OpCodeOperandKind::r8_reg,// Gb
	OpCodeOperandKind::r16_reg,// Gw
	OpCodeOperandKind::r32_reg,// Gd
	OpCodeOperandKind::r64_reg,// Gq
	OpCodeOperandKind::r16_reg_mem,// Gw_mem
	OpCodeOperandKind::r32_reg_mem,// Gd_mem
	OpCodeOperandKind::r64_reg_mem,// Gq_mem
	OpCodeOperandKind::r16_rm,// Rw
	OpCodeOperandKind::r32_rm,// Rd
	OpCodeOperandKind::r64_rm,// Rq
	OpCodeOperandKind::seg_reg,// Sw
	OpCodeOperandKind::cr_reg,// Cd
	OpCodeOperandKind::cr_reg,// Cq
	OpCodeOperandKind::dr_reg,// Dd
	OpCodeOperandKind::dr_reg,// Dq
	OpCodeOperandKind::tr_reg,// Td
	OpCodeOperandKind::imm8,// Ib
	OpCodeOperandKind::imm8sex16,// Ib16
	OpCodeOperandKind::imm8sex32,// Ib32
	OpCodeOperandKind::imm8sex64,// Ib64
	OpCodeOperandKind::imm16,// Iw
	OpCodeOperandKind::imm32,// Id
	OpCodeOperandKind::imm32sex64,// Id64
	OpCodeOperandKind::imm64,// Iq
	OpCodeOperandKind::imm8,// Ib21
	OpCodeOperandKind::imm8,// Ib11
	OpCodeOperandKind::seg_rSI,// Xb
	OpCodeOperandKind::seg_rSI,// Xw
	OpCodeOperandKind::seg_rSI,// Xd
	OpCodeOperandKind::seg_rSI,// Xq
	OpCodeOperandKind::es_rDI,// Yb
	OpCodeOperandKind::es_rDI,// Yw
	OpCodeOperandKind::es_rDI,// Yd
	OpCodeOperandKind::es_rDI,// Yq
	OpCodeOperandKind::br16_1,// wJb
	OpCodeOperandKind::br32_1,// dJb
	OpCodeOperandKind::br64_1,// qJb
	OpCodeOperandKind::br16_2,// Jw
	OpCodeOperandKind::br32_4,// wJd
	OpCodeOperandKind::br32_4,// dJd
	OpCodeOperandKind::br64_4,// qJd
	OpCodeOperandKind::xbegin_2,// Jxw
	OpCodeOperandKind::xbegin_4,// Jxd
	OpCodeOperandKind::brdisp_2,// Jdisp16
	OpCodeOperandKind::brdisp_4,// Jdisp32
	OpCodeOperandKind::mem_offs,// Ob
	OpCodeOperandKind::mem_offs,// Ow
	OpCodeOperandKind::mem_offs,// Od
	OpCodeOperandKind::mem_offs,// Oq
	OpCodeOperandKind::imm8_const_1,// Imm1
	OpCodeOperandKind::bnd_reg,// B
	OpCodeOperandKind::bnd_or_mem_mpx,// BMq
	OpCodeOperandKind::bnd_or_mem_mpx,// BMo
	OpCodeOperandKind::mem_mib,// MIB
	OpCodeOperandKind::mm_rm,// N
	OpCodeOperandKind::mm_reg,// P
	OpCodeOperandKind::mm_or_mem,// Q
	OpCodeOperandKind::xmm_rm,// RX
	OpCodeOperandKind::xmm_reg,// VX
	OpCodeOperandKind::xmm_or_mem,// WX
	OpCodeOperandKind::seg_rDI,// rDI
	OpCodeOperandKind::seg_rBX_al,// MRBX
	OpCodeOperandKind::es,// ES
	OpCodeOperandKind::cs,// CS
	OpCodeOperandKind::ss,// SS
	OpCodeOperandKind::ds,// DS
	OpCodeOperandKind::fs,// FS
	OpCodeOperandKind::gs,// GS
	OpCodeOperandKind::al,// AL
	OpCodeOperandKind::cl,// CL
	OpCodeOperandKind::ax,// AX
	OpCodeOperandKind::dx,// DX
	OpCodeOperandKind::eax,// EAX
	OpCodeOperandKind::rax,// RAX
	OpCodeOperandKind::st0,// ST
	OpCodeOperandKind::sti_opcode,// STi
	OpCodeOperandKind::r8_opcode,// r8_rb
	OpCodeOperandKind::r16_opcode,// r16_rw
	OpCodeOperandKind::r32_opcode,// r32_rd
	OpCodeOperandKind::r64_opcode,// r64_ro
];

#[cfg_attr(feature = "cargo-fmt", rustfmt::skip)]
#[cfg(not(feature = "no_vex"))]
pub(super) static VEX_OP_KINDS: [OpCodeOperandKind; 39] = [
	OpCodeOperandKind::None,// None
	OpCodeOperandKind::r32_or_mem,// Ed
	OpCodeOperandKind::r64_or_mem,// Eq
	OpCodeOperandKind::r32_reg,// Gd
	OpCodeOperandKind::r64_reg,// Gq
	OpCodeOperandKind::r32_or_mem,// RdMb
	OpCodeOperandKind::r64_or_mem,// RqMb
	OpCodeOperandKind::r32_or_mem,// RdMw
	OpCodeOperandKind::r64_or_mem,// RqMw
	OpCodeOperandKind::r32_rm,// Rd
	OpCodeOperandKind::r64_rm,// Rq
	OpCodeOperandKind::r32_vvvv,// Hd
	OpCodeOperandKind::r64_vvvv,// Hq
	OpCodeOperandKind::k_vvvv,// HK
	OpCodeOperandKind::xmm_vvvv,// HX
	OpCodeOperandKind::ymm_vvvv,// HY
	OpCodeOperandKind::imm8,// Ib
	OpCodeOperandKind::imm2_m2z,// I2
	OpCodeOperandKind::xmm_is4,// Is4X
	OpCodeOperandKind::ymm_is4,// Is4Y
	OpCodeOperandKind::xmm_is5,// Is5X
	OpCodeOperandKind::ymm_is5,// Is5Y
	OpCodeOperandKind::mem,// M
	OpCodeOperandKind::mem,// Md
	OpCodeOperandKind::mem,// MK
	OpCodeOperandKind::seg_rDI,// rDI
	OpCodeOperandKind::k_rm,// RK
	OpCodeOperandKind::xmm_rm,// RX
	OpCodeOperandKind::ymm_rm,// RY
	OpCodeOperandKind::k_reg,// VK
	OpCodeOperandKind::mem_vsib32x,// VM32X
	OpCodeOperandKind::mem_vsib32y,// VM32Y
	OpCodeOperandKind::mem_vsib64x,// VM64X
	OpCodeOperandKind::mem_vsib64y,// VM64Y
	OpCodeOperandKind::xmm_reg,// VX
	OpCodeOperandKind::ymm_reg,// VY
	OpCodeOperandKind::k_or_mem,// WK
	OpCodeOperandKind::xmm_or_mem,// WX
	OpCodeOperandKind::ymm_or_mem,// WY
];

#[cfg_attr(feature = "cargo-fmt", rustfmt::skip)]
#[cfg(not(feature = "no_xop"))]
pub(super) static XOP_OP_KINDS: [OpCodeOperandKind; 19] = [
	OpCodeOperandKind::None,// None
	OpCodeOperandKind::r32_or_mem,// Ed
	OpCodeOperandKind::r64_or_mem,// Eq
	OpCodeOperandKind::r32_reg,// Gd
	OpCodeOperandKind::r64_reg,// Gq
	OpCodeOperandKind::r32_rm,// Rd
	OpCodeOperandKind::r64_rm,// Rq
	OpCodeOperandKind::r32_vvvv,// Hd
	OpCodeOperandKind::r64_vvvv,// Hq
	OpCodeOperandKind::xmm_vvvv,// HX
	OpCodeOperandKind::ymm_vvvv,// HY
	OpCodeOperandKind::imm8,// Ib
	OpCodeOperandKind::imm32,// Id
	OpCodeOperandKind::xmm_is4,// Is4X
	OpCodeOperandKind::ymm_is4,// Is4Y
	OpCodeOperandKind::xmm_reg,// VX
	OpCodeOperandKind::ymm_reg,// VY
	OpCodeOperandKind::xmm_or_mem,// WX
	OpCodeOperandKind::ymm_or_mem,// WY
];

#[cfg_attr(feature = "cargo-fmt", rustfmt::skip)]
#[cfg(not(feature = "no_evex"))]
pub(super) static EVEX_OP_KINDS: [OpCodeOperandKind; 36] = [
	OpCodeOperandKind::None,// None
	OpCodeOperandKind::r32_or_mem,// Ed
	OpCodeOperandKind::r64_or_mem,// Eq
	OpCodeOperandKind::r32_reg,// Gd
	OpCodeOperandKind::r64_reg,// Gq
	OpCodeOperandKind::r32_or_mem,// RdMb
	OpCodeOperandKind::r64_or_mem,// RqMb
	OpCodeOperandKind::r32_or_mem,// RdMw
	OpCodeOperandKind::r64_or_mem,// RqMw
	OpCodeOperandKind::xmm_vvvv,// HX
	OpCodeOperandKind::ymm_vvvv,// HY
	OpCodeOperandKind::zmm_vvvv,// HZ
	OpCodeOperandKind::xmmp3_vvvv,// HXP3
	OpCodeOperandKind::zmmp3_vvvv,// HZP3
	OpCodeOperandKind::imm8,// Ib
	OpCodeOperandKind::mem,// M
	OpCodeOperandKind::r32_rm,// Rd
	OpCodeOperandKind::r64_rm,// Rq
	OpCodeOperandKind::xmm_rm,// RX
	OpCodeOperandKind::ymm_rm,// RY
	OpCodeOperandKind::zmm_rm,// RZ
	OpCodeOperandKind::k_rm,// RK
	OpCodeOperandKind::mem_vsib32x,// VM32X
	OpCodeOperandKind::mem_vsib32y,// VM32Y
	OpCodeOperandKind::mem_vsib32z,// VM32Z
	OpCodeOperandKind::mem_vsib64x,// VM64X
	OpCodeOperandKind::mem_vsib64y,// VM64Y
	OpCodeOperandKind::mem_vsib64z,// VM64Z
	OpCodeOperandKind::k_reg,// VK
	OpCodeOperandKind::kp1_reg,// VKP1
	OpCodeOperandKind::xmm_reg,// VX
	OpCodeOperandKind::ymm_reg,// VY
	OpCodeOperandKind::zmm_reg,// VZ
	OpCodeOperandKind::xmm_or_mem,// WX
	OpCodeOperandKind::ymm_or_mem,// WY
	OpCodeOperandKind::zmm_or_mem,// WZ
];
